import request from '@/utils/axios'

export interface PropertyType {
  propertyId?: number // 属性编号
  propertyName?: string // 属性名称
  valueId?: number // 属性值编号
  valueName?: string // 属性值名称
}

export interface SkuType {
  id?: number // 商品 SKU 编号
  name?: string // 商品 SKU 名称
  spuId?: number // SPU 编号
  properties?: PropertyType[] // 属性数组
  price?: number | string // 商品价格
  marketPrice?: number | string // 市场价
  costPrice?: number | string // 成本价
  barCode?: string // 商品条码
  picUrl?: string // 图片地址
  stock?: number // 库存
  weight?: number // 商品重量，单位：kg 千克
  volume?: number // 商品体积，单位：m^3 平米
  firstBrokeragePrice?: number | string // 一级分销的佣金
  secondBrokeragePrice?: number | string // 二级分销的佣金
  salesCount?: number // 商品销量
}

export interface GiveCouponTemplateType {
  id?: number
  name?: string // 优惠券名称
}

export interface SpuType {
  id: number
  name?: string // 商品名称
  categoryId?: number // 商品分类
  keyword?: string // 关键字
  unit?: number | undefined // 单位
  picUrl?: string // 商品封面图
  sliderPicUrls?: string[] // 商品轮播图
  introduction?: string // 商品简介
  deliveryTypes?: number[] // 配送方式
  deliveryTemplateId?: number | undefined // 运费模版
  brandId?: number // 商品品牌编号
  specType?: boolean // 商品规格
  subCommissionType?: boolean // 分销类型
  skuList?: SkuType[] // sku数组
  description?: string // 商品详情
  sort?: number // 商品排序
  giveIntegral?: number // 赠送积分
  virtualSalesCount?: number // 虚拟销量
  price?: number // 商品价格
  salesCount?: number // 商品销量
  marketPrice?: number // 市场价
  costPrice?: number // 成本价
  stock?: number // 商品库存
  createTime?: Date // 商品创建时间
  status?: number // 商品状态
}

/**
 * spu: 将不同的产品变种或规格汇总为一个单一实体或产品的标识符，通常用于商品分类和在线商品的产品列表中
 */
export const SpuApi = {
  // 创建商品 spu
  create: async (data: SpuType) => {
    return await request.post({
      url: '/product/spu/create',
      data,
      is_mock: true
    })
  },
  // 更新商品 spu
  update: async (data: SpuType) => {
    return await request.post({
      url: '/product/spu/update',
      data,
      is_mock: true
    })
  },
  // 更新商品 spu status
  updateStatus: async (id: number, status: [0, 1]) => {
    return await request.put({
      url: '/product/spu/update-status',
      data: {
        id,
        status
      },
      is_mock: true
    })
  },
  // 删除商品 spu
  delete: async (id: number) => {
    return await request.delete({ url: `/product/spu/delete?id=${id}`, is_mock: true })
  },
  // 获取商品详情
  detail: async (id: number) => {
    return await request.get({
      url: `/product/spu/get-detail?id=${id}`,
      is_mock: true
    })
  },
  // 获取商品 spu 分页列表
  page: async params => {
    return await request.get({
      url: '/product/spu/page',
      params,
      is_mock: true
    })
  },
  // 获取商品 spu 列表
  list: async (ids: number[]) => {
    return await request.get({
      url: `/product/spu/list?spuIds=${ids}`,
      is_mock: true
    })
  },
  // 获取全部商品 spu 列表
  all: async () => {
    return await request.get({
      url: `/product/spu/list-all-simple`,
      is_mock: true
    })
  },
  // 导出商品 spu Excel
  export: async params => {
    return await request.download({
      url: '/product/spu/export',
      params,
      is_mock: true
    })
  },
  // 获取商品 spu 在各状态的数量 出售中|仓库中|已售罄|警戒库存|回收站
  count: async () => {
    return await request.get({ url: '/product/spu/get-count', is_mock: true })
  }
}
